 
Ext.Loader.setConfig({enabled: true});
Ext.Loader.setPath('administracion', 'static/combos/componentes/administracion');

Ext.require([
    'Ext.data.*',
    'Ext.tip.QuickTipManager',
    'Ext.window.MessageBox',
    'Ext.grid.*',
    'Ext.tab.*',
    'Ext.window.*',
    'Ext.tip.*',
    'Ext.layout.container.Border',
    'Ext.dd.*',
    'Ext.form.field.ComboBox',
    'administracion.RolesForm',
    'administracion.RolesGrid',
    'Ext.form.FieldSet'
]);

Ext.define('DataUsuario', {
    extend: 'Ext.data.Model',
    fields: ['nombreUsuario']
});

Ext.define('DataTipoItem', {
    extend: 'Ext.data.Model',
    fields: [{
			name: 'id',
			type: 'int'
		},'nombreTipoItem']
});

Ext.define('DataFases', {
    extend: 'Ext.data.Model',
    fields: [{
			name: 'id',
			type: 'int'
		},'nombreFase']
});

Ext.define('DataProyectos', {
    extend: 'Ext.data.Model',
    fields: [{
			name: 'id',
			type: 'int'
		},'nombreProyecto']
});

Ext.define('DataPermiso', {
    extend: 'Ext.data.Model',
    fields: ['nombrePermiso']
});

Ext.onReady(function(){
    Ext.tip.QuickTipManager.init();    
    
    	function getPermisos()
		{
			Ext.Ajax.request({
					url: 'listarPermisos_Logueado',
					method: 'GET',
					success: function(response) {
						var jsonData = Ext.JSON.decode(response.responseText);
						var resultMessage = jsonData['data'];
						if(extraer(resultMessage,'{','crear-rol')){	
							win.child('#form').down('#nuevo').enable();
							win.child('#form').down('#nuevo').show();
												
						}
						if(extraer(resultMessage,'{','eliminar-rol')){	
							win.child('#form').down('#delete').enable();
							
						}
						if(extraer(resultMessage,'{','modificar-rol')){	
							win.child('#form').down('#editar').enable();
							
						}
						if(extraer(resultMessage,'{','asignar-rol')){	
							win.child('#form').down('#users').enable();
							
						}
						if(extraer(resultMessage,'{','asignar-permiso')){	
							win.child('#form').down('#permisos').enable();
							
						}/*
						if(extraer(resultMessage,'{','desasignar-tipo-item-rol')){	
							win.child('#form').down('#tipoItem').enable();
							
						}
						if(extraer(resultMessage,'{','desasignar-proyecto-rol')){	
							win.child('#form').down('#proyecto').enable();
							
						}
						if(extraer(resultMessage,'{','desasignar-fase-rol')){	
							win.child('#form').down('#fase').enable();
							
						}*/																																					
						
					}
			});
		}
    
   
    var store = Ext.create('Ext.data.Store', {
        model: 'Writer.Person',
        autoLoad: true,  
        proxy: {
            type: 'ajax',
            url: 'listarRoles',
            reader: {
                type: 'json',
                successProperty: 'success',
                root: 'data',
                messageProperty: 'message'
            },
        },  
        sorters: [{
            property: 'id',
            direction: 'ASC'
        }]    
    });
        win = Ext.create('widget.panel', {
			renderTo: 'comboRol',
            width: 1050,  height: 390,
            frame: true,
            iconCls: 'icon-alpha',
			title: 'ADMINISTRACION - ROLES',
            layout: 'border',
            //bodyStyle: 'padding: 3px;',
			y: 30,	x: 160,
            items: [{
                    region: 'west',		xtype: 'writerform',	itemId: 'form',		width: 360,
					listeners: {
						refresh: function() {
							win.child('#grid').onRefresh();		
						},
						ddProyectos: function(data){
							var grid1, grid2;
							nombre = extraer(data, '&nombreRol=', '&descripcion=');		id = extraer(data, 'id=', '&');
                            winProyectos = Ext.create('widget.window', {
								iconCls: 'icon-proyecto',
								x: 400, y: 260,
								title: 'Drag and Drop - Asignar/Desasignar Proyectos al Rol: ' + nombre,
								closable: false,
								plain: true,
								layout: 'fit',
								items: [displayPanel = Ext.create('Ext.Panel', {
											width : 550,	height : 250,
											layout  : {	type: 'hbox',	align: 'stretch'	},
											defaults  : { flex : 1 }, 
											items : [
													grid1 = Ext.create('Ext.grid.Panel', {
														multiSelect: true,
														viewConfig: {
															plugins: {
																	ptype: 'gridviewdragdrop',
																	dragGroup: 'firstGridDDGroup',
																	dropGroup: 'secondGridDDGroup'
															},
														},
														store: Ext.create('Ext.data.Store', {
																	model: 'DataProyectos',
																	autoLoad: true,
																	proxy: {
																		type: 'ajax',
																		url: 'listarNoProyectos_Rol/'+ id,
																		reader: {
																			type: 'json',
																			successProperty: 'success',
																			root: 'data',
																			messageProperty: 'message'
																		},

																	}      
																}),
														columns:  [ {text: "Id", hidden:true, dataIndex: 'id'},
																	{text: "<b>Proyectos No Asignados</b>", flex: 1, sortable: true, dataIndex: 'nombreProyecto'} ],
														stripeRows : true
													}),
													grid2 = Ext.create('Ext.grid.Panel', {
														multiSelect: true,
														viewConfig: {
															plugins: {
																	ptype: 'gridviewdragdrop',
																	dragGroup: 'secondGridDDGroup',
																	dropGroup: 'firstGridDDGroup'
																},
														},
														store: Ext.create('Ext.data.Store', {
																model: 'DataProyectos',
																autoLoad: true,
																proxy: {
																	type: 'ajax',
																	url: 'listarProyectos_Rol/'+ id,
																	reader: {
																		type: 'json',
																		successProperty: 'success',
																		root: 'data',
																		messageProperty: 'message'
																	},

																}       
														}),
														columns  : [ 	{text: "Id", hidden:true,  dataIndex: 'id'},
																		{text: "<b>Proyectos Asignados</b>", flex: 1, sortable: true, dataIndex: 'nombreProyecto'} ],
														stripeRows : true
													})
											],
											dockedItems: {
												xtype: 'toolbar',
												dock: 'bottom',
												items: ['->', // Fill
												{
													text: 'Guardar',
													iconCls: 'icon-save',
													handler: function(){
														grid2.getSelectionModel().selectAll();
														longitud= grid2.getSelectionModel().getSelection().length;
														lista_proyectos = new Array(longitud);
														i=0;
														while(i < longitud)
														{											
															lista_proyectos[i]=grid2.getSelectionModel().getSelection()[i].data['id'];
															i=i+1;
														}	
														grid2.getSelectionModel().deselectAll();											
														Ext.Ajax.request({
															url: 'asignarProyectos_desdeABMRol',
															params: {
																id_rol: id,
																lista_proyectos:Ext.encode(lista_proyectos)
															},
															success: function() {
																Ext.Msg.show({ 		title: '<br><p align="center"><b>ALPHA MANAGER</b></p>', //<- el título del diálogo  
																					msg: 'Proyectos asignados correctamente', 	icon: 'ext-mb-ok',
																});	
															},
															failure: function() {
																Ext.Msg.show({	title: '<br><p align="center"><b>ALPHA MANAGER</b></p>',   
																				msg: 'Error en la asignacion de Proyectos ', 	icon: 'ext-mb-error',
																});
															}
														})
													}
												},
												{
													text: 'Cerrar',
													iconCls: 'icon-cerrar',
													handler: function(){winProyectos.close()}
												}]
											}
									}),{
									border: false
								}]
							});					
							winProyectos.show();						
						},
						ddFases: function(data){
							var grid1, grid2;
							nombre = extraer(data, '&nombreRol=', '&descripcion=');		id = extraer(data, 'id=', '&');
                            winFases = Ext.create('widget.window', {
								iconCls: 'icon-fase',
								title: 'Drag and Drop - Asignar/Desasignar Fases al Rol: ' + nombre,
								closable: false,
								x: 400, y: 260,
								plain: true,
								layout: 'fit',
								items: [displayPanel = Ext.create('Ext.Panel', {
											width : 550,	height : 250,
											layout  : {	type: 'hbox',	align: 'stretch'	},
											defaults  : { flex : 1 }, 
											items : [
													grid1 = Ext.create('Ext.grid.Panel', {
														multiSelect: true,
														viewConfig: {
															plugins: {
																	ptype: 'gridviewdragdrop',
																	dragGroup: 'firstGridDDGroup',
																	dropGroup: 'secondGridDDGroup'
															},
														},
														store: Ext.create('Ext.data.Store', {
																	model: 'DataFases',
																	autoLoad: true,
																	proxy: {
																		type: 'ajax',
																		url: 'listarNoFases_Rol/'+ id,
																		reader: {
																			type: 'json',
																			successProperty: 'success',
																			root: 'data',
																			messageProperty: 'message'
																		},

																	}      
																}),
														columns:  [ 	{text: "Id", hidden:true, dataIndex: 'id'},
																		{text: "<b>Fases No Asignadas</b>", flex: 1, sortable: true, dataIndex: 'nombreFase'} ],
														stripeRows : true
													}),
													grid2 = Ext.create('Ext.grid.Panel', {
														multiSelect: true,
														viewConfig: {
															plugins: {
																	ptype: 'gridviewdragdrop',
																	dragGroup: 'secondGridDDGroup',
																	dropGroup: 'firstGridDDGroup'
																},
														},
														store: Ext.create('Ext.data.Store', {
																model: 'DataFases',
																autoLoad: true,
																proxy: {
																	type: 'ajax',
																	url: 'listarFases_Rol/'+ id,
																	reader: {
																		type: 'json',
																		successProperty: 'success',
																		root: 'data',
																		messageProperty: 'message'
																	},

																}       
														}),
														columns  : [ 	{text: "Id", hidden:true, dataIndex: 'id'},
																		{text: "<b>Fases Asignadas</b>", flex: 1, sortable: true, dataIndex: 'nombreFase'} ],
														stripeRows : true
													})
											],
											dockedItems: {
												xtype: 'toolbar',
												dock: 'bottom',
												items: ['->', // Fill
												{
													text: 'Guardar',
													iconCls: 'icon-save',
													handler: function(){
														grid2.getSelectionModel().selectAll();
														longitud= grid2.getSelectionModel().getSelection().length;
														lista_fases = new Array(longitud);
														i=0;
														while(i < longitud)
														{											
															lista_fases[i]=grid2.getSelectionModel().getSelection()[i].data['id'];
															i=i+1;
														}	
														grid2.getSelectionModel().deselectAll();											
														Ext.Ajax.request({
															url: 'asignarFases_desdeABMRol',
															params: {
																id_rol: id,
																lista_fases:Ext.encode(lista_fases)
															},
															success: function() {
																Ext.Msg.show({ 		title: '<br><p align="center"><b>ALPHA MANAGER</b></p>', //<- el título del diálogo  
																					msg: 'Fases asignadas correctamente', 	icon: 'ext-mb-ok',
																});	
															},
															failure: function() {
																Ext.Msg.show({	title: '<br><p align="center"><b>ALPHA MANAGER</b></p>',   
																				msg: 'Error en la asignacion de Fases ', 	icon: 'ext-mb-error',
																});
															}
														})
													}
												},
												{
													text: 'Cerrar',
													iconCls: 'icon-cerrar',
													handler: function(){winFases.close()}
												}]
											}
									}),{
									border: false
								}]
							});					
							winFases.show();						
						},						
						ddTiposItem: function(data){
							var grid1, grid2;
							nombre = extraer(data, '&nombreRol=', '&descripcion=');		id = extraer(data, 'id=', '&');
                            winTipoItem = Ext.create('widget.window', {
								iconCls: 'icon-tipoItem',
								title: 'Drag and Drop - Asignar/Desasignar Tipos de Item al Rol: ' + nombre,
								closable: false,
								x: 400, y: 260,
								plain: true,
								layout: 'fit',
								items: [displayPanel = Ext.create('Ext.Panel', {
											width : 550,	height : 250,
											layout  : {	type: 'hbox',	align: 'stretch'	},
											defaults  : { flex : 1 }, 
											items : [
													grid1 = Ext.create('Ext.grid.Panel', {
														multiSelect: true,
														viewConfig: {
															plugins: {
																	ptype: 'gridviewdragdrop',
																	dragGroup: 'firstGridDDGroup',
																	dropGroup: 'secondGridDDGroup'
															},
														},
														store: Ext.create('Ext.data.Store', {
																	model: 'DataTipoItem',
																	autoLoad: true,
																	proxy: {
																		type: 'ajax',
																		url: 'listarNoTipoItem_Rol/'+ id,
																		reader: {
																			type: 'json',
																			successProperty: 'success',
																			root: 'data',
																			messageProperty: 'message'
																		},

																	}      
																}),
														columns:  [ {text: "Id", hidden:true, dataIndex: 'id'},
																	{text: "<b>Tipos de Items No Asignados</b>", flex: 1, sortable: true, dataIndex: 'nombreTipoItem'} ],
														stripeRows : true
													}),
													grid2 = Ext.create('Ext.grid.Panel', {
														multiSelect: true,
														viewConfig: {
															plugins: {
																	ptype: 'gridviewdragdrop',
																	dragGroup: 'secondGridDDGroup',
																	dropGroup: 'firstGridDDGroup'
																},
														},
														store: Ext.create('Ext.data.Store', {
																model: 'DataTipoItem',
																autoLoad: true,
																proxy: {
																	type: 'ajax',
																	url: 'listarTipoItem_Rol/'+ id,
																	reader: {
																		type: 'json',
																		successProperty: 'success',
																		root: 'data',
																		messageProperty: 'message'
																	},

																}       
														}),
														columns  : [ {text: "Id", hidden:true, dataIndex: 'id'},
																	{text: "<b>Tipos de Item Asignados</b>", flex: 1, sortable: true, dataIndex: 'nombreTipoItem'} ],
														stripeRows : true
													})
											],
											dockedItems: {
												xtype: 'toolbar',
												dock: 'bottom',
												items: ['->', // Fill
												{
													text: 'Guardar',
													iconCls: 'icon-save',
													handler: function(){
														grid2.getSelectionModel().selectAll();
														longitud= grid2.getSelectionModel().getSelection().length;
														lista_tiposItem = new Array(longitud);
														i=0;
														while(i < longitud)
														{											
															lista_tiposItem[i]=grid2.getSelectionModel().getSelection()[i].data['id'];
															i=i+1;
														}	
														grid2.getSelectionModel().deselectAll();											
														Ext.Ajax.request({
															url: 'asignarTiposItem_desdeABMRol',
															params: {
																id_rol: id,
																lista_tiposItem:Ext.encode(lista_tiposItem)
															},
															success: function() {
																Ext.Msg.show({ 		title: '<br><p align="center"><b>ALPHA MANAGER</b></p>', //<- el título del diálogo  
																					msg: 'Tipos de Item asignados correctamente', 	icon: 'ext-mb-ok',
																});	
															},
															failure: function() {
																Ext.Msg.show({	title: '<br><p align="center"><b>ALPHA MANAGER</b></p>',   
																				msg: 'Error en la asignacion de Tipos de Item ', 	icon: 'ext-mb-error',
																});
															}
														})
													}
												},
												{
													text: 'Cerrar',
													iconCls: 'icon-cerrar',
													handler: function(){winTipoItem.close()}
												}]
											}
									}),{
									border: false
								}]
							});					
							winTipoItem.show();						
						},						
						ddUsuarios: function(data){
							var grid1, grid2;
							nombre = extraer(data, '&nombreRol=', '&descripcion=');		id = extraer(data, 'id=', '&');
                            win2 = Ext.create('widget.window', {
								iconCls: 'icon-user',
								title: 'Drag and Drop - Asignar/Desasignar Usuarios al Rol: ' + nombre,
								closable: false,
								x: 400, y: 260,
								plain: true,
								layout: 'fit',
								items: [displayPanel = Ext.create('Ext.Panel', {
											width : 550,	height : 250,
											layout  : {	type: 'hbox',	align: 'stretch'	},
											defaults  : { flex : 1 }, 
											items : [
													grid1 = Ext.create('Ext.grid.Panel', {
														multiSelect: true,
														viewConfig: {
															plugins: {
																	ptype: 'gridviewdragdrop',
																	dragGroup: 'firstGridDDGroup',
																	dropGroup: 'secondGridDDGroup'
															},
														},
														store: Ext.create('Ext.data.Store', {
																	model: 'DataUsuario',
																	autoLoad: true,
																	proxy: {
																		type: 'ajax',
																		url: 'listarNoUsuarios_Rol/'+ id,
																		reader: {
																			type: 'json',
																			successProperty: 'success',
																			root: 'data',
																			messageProperty: 'message'
																		},

																	}      
																}),
														columns:  [ {text: "<b>Usuarios No Asignados</b>", flex: 1, sortable: true, dataIndex: 'nombreUsuario'} ],
														stripeRows : true
													}),
													grid2 = Ext.create('Ext.grid.Panel', {
														multiSelect: true,
														viewConfig: {
															plugins: {
																	ptype: 'gridviewdragdrop',
																	dragGroup: 'secondGridDDGroup',
																	dropGroup: 'firstGridDDGroup'
																},
														},
														store: Ext.create('Ext.data.Store', {
																model: 'DataUsuario',
																autoLoad: true,
																proxy: {
																	type: 'ajax',
																	url: 'listarUsuarios_Rol/'+ id,
																	reader: {
																		type: 'json',
																		successProperty: 'success',
																		root: 'data',
																		messageProperty: 'message'
																	},

																}       
														}),
														columns  : [ {text: "<b>Usuarios Asignados</b>", flex: 1, sortable: true, dataIndex: 'nombreUsuario'} ],
														stripeRows : true
													})
											],
											dockedItems: {
												xtype: 'toolbar',
												dock: 'bottom',
												items: ['->', // Fill
												{
													text: 'Guardar',
													iconCls: 'icon-save',
													handler: function(){
														grid2.getSelectionModel().selectAll();
														longitud= grid2.getSelectionModel().getSelection().length;
														lista_usuarios = new Array(longitud);
														i=0;
														while(i < longitud)
														{											
															lista_usuarios[i]=grid2.getSelectionModel().getSelection()[i].data['nombreUsuario'];
															i=i+1;
														}	
														grid2.getSelectionModel().deselectAll();											
														Ext.Ajax.request({
															url: 'asignarUsuarios_desdeABMRol',
															params: {
																id_rol: id,
																lista_usuarios:Ext.encode(lista_usuarios)
															},
															success: function() {
																Ext.Msg.show({ 		title: '<br><p align="center"><b>ALPHA MANAGER</b></p>', //<- el título del diálogo  
																					msg: 'Usuarios asignados correctamente', 	icon: 'ext-mb-ok',
																});	
															},
															failure: function() {
																Ext.Msg.show({	title: '<br><p align="center"><b>ALPHA MANAGER</b></p>',   
																				msg: 'Error en la asignacion de usuarios', 	icon: 'ext-mb-error',
																});
															}
														})
													}
												},
												{
													text: 'Cerrar',
													iconCls: 'icon-cerrar',
													handler: function(){win2.close()}
												}]
											}
									}),{
									border: false
								}]
							});					
							win2.show();						
						},
						ddPermisos: function(data){
							var grid3, grid4;
							nombre = extraer(data, '&nombreRol=', '&descripcion=');		id = extraer(data, 'id=', '&');
                            win4 = Ext.create('widget.window', {
								iconCls: 'icon-permiso',
								title: 'Drag and Drop - Asignar/Desasignar Permisos al Rol: ' + nombre,
								closable: false,
								x: 400, y: 260,
								plain: true,
								layout: 'fit',
								items: [displayPanel = Ext.create('Ext.Panel', {
											width : 550,	height : 250,
											layout  : {	type: 'hbox',	align: 'stretch'	},
											defaults  : { flex : 1 }, 
											items : [
													grid3 = Ext.create('Ext.grid.Panel', {
														multiSelect: true,
														viewConfig: {
															plugins: {
																	ptype: 'gridviewdragdrop',
																	dragGroup: 'firstGridDDGroup',
																	dropGroup: 'secondGridDDGroup'
															},
														},
														store: Ext.create('Ext.data.Store', {
																	model: 'DataPermiso',
																	autoLoad: true,
																	proxy: {
																		type: 'ajax',
																		url: 'listarNoPermisos_Rol/'+ id,
																		reader: {
																			type: 'json',
																			successProperty: 'success',
																			root: 'data',
																			messageProperty: 'message'
																		},

																	}      
																}),
														columns:  [ {text: "<b>Permisos No Asignados</b>", flex: 1, sortable: true, dataIndex: 'nombrePermiso'} ],
														stripeRows : true
													}),
													grid4 = Ext.create('Ext.grid.Panel', {
														multiSelect: true,
														viewConfig: {
															plugins: {
																	ptype: 'gridviewdragdrop',
																	dragGroup: 'secondGridDDGroup',
																	dropGroup: 'firstGridDDGroup'
																},
														},
														store: Ext.create('Ext.data.Store', {
																model: 'DataPermiso',
																autoLoad: true,
																proxy: {
																	type: 'ajax',
																	url: 'listarPermisos_Rol/'+ id,
																	reader: {
																		type: 'json',
																		successProperty: 'success',
																		root: 'data',
																		messageProperty: 'message'
																	},

																}       
														}),
														columns  : [ {text: "<b>Permisos Asignados</b>", flex: 1, sortable: true, dataIndex: 'nombrePermiso'} ],
														stripeRows : true
													})
											],
											dockedItems: {
												xtype: 'toolbar',
												dock: 'bottom',
												items: ['->', // Fill
												{
													text: 'Guardar',
													iconCls: 'icon-save',
													handler: function(){
														grid4.getSelectionModel().selectAll();
														longitud= grid4.getSelectionModel().getSelection().length;
														lista_permisos = new Array(longitud);
														j=0;
														while(j < longitud)
														{											
															lista_permisos[j]=grid4.getSelectionModel().getSelection()[j].data['nombrePermiso'];
															j=j+1;
														}	
														grid4.getSelectionModel().deselectAll();
														/*if (lista_permisos[2]==='eliminar usuario'){
															Ext.Msg.alert(lista_permisos[2]);}		*/									
														Ext.Ajax.request({
															url: 'asignarPermisos_desdeABMRol',
															params: {
																id_rol: id,
																lista_permisos:Ext.encode(lista_permisos)
															},
															success: function() {
																Ext.Msg.show({ 		title: '<br><p align="center"><b>ALPHA MANAGER</b></p>', //<- el título del diálogo  
																					msg: 'Permisos asignados correctamente', 	icon: 'ext-mb-ok',
																});	
															},
															failure: function() {
																Ext.Msg.show({	title: '<br><p align="center"><b>ALPHA MANAGER</b></p>',   
																				msg: 'Error en la asignacion de permisos', 	icon: 'ext-mb-error',
																});
															}
														})
													}
												},
												{
													text: 'Cerrar',
													iconCls: 'icon-cerrar',
													handler: function(){win4.close()}
												}]
											}
									}),{
									border: false
								}]
							});					
							win4.show();						
						}
					}
				}, {
                    region: 'center',
					xtype: 'writergrid',            
					itemId: 'grid',
					title: 'Lista de Roles ',
					flex: 1,        
					//width: 470,
					//height: 380,
					store: store,					
					listeners: {
						selectionchange: function(selModel, selected) {
							win.child('#form').setActiveRecord(selected[0] || null);
						}
					}
				}] 
            });
            getPermisos();
            win.show();
            
});


    function extraer(texto, etqini, etqfin)
	{
		var ind0, ind1, parte ="";
		ind0 = texto.indexOf(etqini);
		if (ind0 >=0)
		{
			ind1 = texto.indexOf(etqfin);
		if (ind1>ind0)
			parte = texto.substring(ind0+etqini.length, ind1);
		}
		return parte;
	}

